package com.demo.cms.service;

import java.util.List;

import com.demo.cms.model.ArticleExtend;

/**
 * 文章扩展属性服务接口
 * 文章扩展属性方便文章进行扩展
 * 提供
 * @author ryuu.kk
 *
 */
public interface ArticleExtendService {

	/**
	 * 增加文章扩展属性
	 * @param extention 文章扩展属性模型
	 * @return 外键ID
	 */
	Long add(ArticleExtend extention);
	
	/**
	 * 增加文章所有扩展属性
	 * @param extentions 文章扩展属性模型列表
	 */
	void addAll(List<ArticleExtend> extentions);
	
	/**
	 * 文章扩展属性模型是否存在
	 * @param id 外键ID
	 * @return 是否存在
	 */
	boolean exists(Long id);
	
	/**
	 * 更新文章扩展属性
	 * @param id 文章扩展属性ID
	 * @param value 扩展属性值
	 * @param type 扩张属性类型
	 */
	void update(Long id, String value, String type);
	
	/**
	 * 更新文章扩展属性
	 * @param articleId 文章ID
	 * @param name 扩展属性内容
	 * @param value 扩展属性值
	 * @param type 扩展属性类型
	 */
	void update(Long articleId, String name, String value, String type);

	/**
	 * ArticleExtend全字段更新(不包括Key)
	 * @param articleId 文章ID
	 * @param articleExtend 要更新的文章扩展属性模型
	 */
	void update(Long articleId, ArticleExtend articleExtend);
	
	/**
	 * 删除文章扩展属性
	 * @param id 扩展属性ID
	 */
	void delete(Long id);
	
	/**
	 * 删除文章扩展属性
	 * @param key 扩展属性key
	 */
	void deleteByKey(String key);
	
	/**
	 * 删除一篇文章所有扩展属性
	 * @param articleId 文章外键ID
	 */
	void deleteAll(Long articleId);
	
	/**
	 * 通过文章ID查询文章扩展属性List
	 * @param articleId 文章扩展属性ID
	 * @return 文章扩展属性列表
	 */
	List<ArticleExtend> findList(Long articleId);
	
	/**
	 * 通过ID查询文章扩展属性
	 * @param id 文章扩展属性ID
	 * @return 文章扩展属性
	 */
	ArticleExtend find(Long id);
	
	/**
	 * 通过文章ID和文章扩展属性Key查询文章扩展属性
	 * @param articleId 文章ID
	 * @param name 扩展属性名
	 * @return 文章扩展属性
	 */
	List<ArticleExtend> findList(Long articleId, String name);

	/**
	 * 通过文章ID,扩展属性Key,类型type查询文扩展属性
	 * @param articleId 文章ID
	 * @param key 文章扩展属性Key
	 * @return 文章扩展属性
	 */
	ArticleExtend find(Long articleId, String key, String type);
	
	/**
	 * 通过文章ID,文章扩展属性Key,类型type ,查询文章扩展属性
	 * @param articleId 文章ID
	 * @param name 扩展属性名
	 * @param type 扩展属性类型
	 * @return 文章扩展属性
	 */
	List<ArticleExtend> findList(Long articleId, String name, String type);
}
